#ifndef FILIZOLACS_H
#define FILIZOLACS_H

#include "balanca.h"

/*
    Classe que implementa o protocolo de comunicação
    com a linha CS das balanças Filizola.

    Caso esteja tudo correto, o formato dos dados retornados pela balança segue o padrão a seguir:
    STX S P P P P P B V V V V V V B T T T T T T ETX

    Onde:
    STX - 02 HEX da tabela ASCII - Inicio do texto
    S   - caractere 'espaço' se peso positivo ou '-'(menos) se negativo
    P   - peso líquido, sendo o primeiro caractere 'espaço' se for igual a 0 (zero)
    B   - caractere 'espaço'
    V   - preço por kg
    B   - caractere 'espaço'
    T   - total pagar
    ETX - 03 HEX da tabela ASCII - Fim do texto


    Quando a balança estiver com indicação instável no visor, esta enviará a seguinte sequência:
    STX I I I I I I I I I I I I I I I I I I I I ETX

    Onde:
    STX - 02 HEX da tabela ASCII - Inicio do texto
    I   - caractere 'I' - indicação de peso instável
    ETX - 03 HEX da tabela ASCII - Fim do texto


    Quando a balança estiver com indicação de alívio do prato no visor, esta enviará a seguinte seqüência:
    STX N N N N N N N N N N N N N N N N N N N N ETX

    Onde:
    STX - 02 HEX da tabela ASCII - Inicio do texto
    N   - caractere 'N' - indicação de alívio do prato
    ETX - 03 HEX da tabela ASCII - Fim do texto


    Quando a balança estiver com indicação de excesso de peso no visor, esta enviará a seguinte seqüência:
    STX S S S S S S S S S S S S S S S S S S S S ETX

    Onde:
    STX - 02 HEX da tabela ASCII - Inicio do texto
    S   - caractere 'S' - indicação de excesso de peso
    ETX - 03 HEX da tabela ASCII - Fim do texto

    Opcionalmente é possível configurar o equipamento de modo que envie o código da mercadoria que está sendo
    processada. Neste caso a seqüência enviada será:
    STX S P P P P P B V V V V V V B T T T T T T B C C C C ETX

    Onde 'C' é o código do produto - caracteres de '0' a '9'
*/

//inicio do texto (resposta)
#define _STX '\x02'

//finm do text (resposta)
#define _ETX '\x03'

//Consulta a balança
#define _ENQ '\x05'

class FilizolaCS : public Balanca
{
    Q_OBJECT
public:
    explicit FilizolaCS(QObject *parent = 0);

    virtual QVariantMap get_dados();
    virtual void enviar_preco(double preco);

protected:
    virtual int _ler_resposta(char *buffer, int bufferSz);
    virtual QVariantMap _formatar_resposta(char *dados, int dadosLidos);
    virtual QVariantMap _formatar_peso(QString dados);
};

#endif // FILIZOLACS_H
